/**
 * 字段数据类型
 */
export enum FieldDataType {
  STRING = 'string',
  NUMBER = 'number',
  BOOLEAN = 'boolean',
  DATE = 'date',
  ENUM = 'enum',
  TEXT = 'text',
  UUID = 'uuid',
  JSON = 'json',
}

/**
 * 前端组件类型
 */
export enum FieldComponentType {
  INPUT = 'input',
  NUMBER = 'number',
  SELECT = 'select',
  SWITCH = 'switch',
  DATE = 'date',
  DATE_RANGE = 'dateRange',
  TEXTAREA = 'textarea',
  PASSWORD = 'password',
  UPLOAD = 'upload',
  CUSTOM = 'custom',
}

/**
 * 表单模式
 */
export enum FormMode {
  CREATE = 'create',
  EDIT = 'edit',
  BOTH = 'both',
}

/**
 * 字段校验规则
 */
export interface FieldValidationRule {
  type: 'required' | 'min' | 'max' | 'pattern' | 'email' | 'url' | 'custom';
  value?: any;
  message: string;
}

/**
 * 字段选项（用于 select 等组件）
 */
export interface FieldOption {
  label: string;
  value: any;
  disabled?: boolean;
}

/**
 * 字段元数据配置
 */
export interface FieldMeta {
  // 基础信息
  key: string; // 字段名
  title: string; // 显示名称
  dataType: FieldDataType; // 数据类型
  component?: FieldComponentType; // 前端组件类型
  
  // 表格配置
  inTable?: boolean; // 是否在表格中显示
  tableWidth?: number; // 表格列宽度
  tableSortable?: boolean; // 是否可排序
  tableFixed?: 'left' | 'right'; // 是否固定列
  tableRender?: string; // 自定义渲染类型（如 avatar, tag, date, enum等）
  
  // 搜索配置
  inSearch?: boolean; // 是否在搜索表单中显示
  searchComponent?: FieldComponentType; // 搜索表单组件类型（如果不同于默认组件）
  searchPlaceholder?: string; // 搜索占位符
  searchCol?: number; // 搜索表单列数（1-24）
  
  // 表单配置
  inForm?: boolean; // 是否在新增/编辑表单中显示
  formMode?: FormMode; // 表单模式：create, edit, both
  formComponent?: FieldComponentType; // 表单组件类型（如果不同于默认组件）
  formPlaceholder?: string; // 表单占位符
  formCol?: number; // 表单列数（1-24）
  
  // 校验配置
  required?: boolean; // 是否必填
  rules?: FieldValidationRule[]; // 校验规则
  defaultValue?: any; // 默认值
  
  // 选项配置（用于 select 等）
  options?: FieldOption[]; // 选项列表
  optionsApi?: string; // 选项 API 地址（动态加载选项）
  optionsKey?: string; // 选项数据键名（用于关联数据，如 roleId -> roles API）
  
  // 其他配置
  disabled?: boolean; // 是否禁用
  readonly?: boolean; // 是否只读
  hidden?: boolean; // 是否隐藏
  description?: string; // 字段描述
  tooltip?: string; // 提示信息
  
  // 自定义配置
  customConfig?: Record<string, any>; // 自定义配置（用于特殊需求）
}

/**
 * 资源字段元数据配置
 */
export interface ResourceFieldMeta {
  resource: string; // 资源名称（如 users, roles）
  fields: FieldMeta[]; // 字段列表
}

/**
 * 字段元数据响应
 */
export interface FieldMetaResponse {
  resource: string;
  fields: FieldMeta[];
}

